/*
 * @lc app=leetcode.cn id=313 lang=cpp
 *
 * [313] 超级丑数
 */

// @lc code=start
class Solution {
public:
    int nthSuperUglyNumber(int n, vector<int>& primes) {
        //仿照264的解法
        //将答案看成生成的序列
        //对于primes数组每一个prime设置一个count标识（答案序列的标识号）
        vector<int> count(primes.size(), 0);
        vector<int> ans(n, 0);
        ans[0] = 1;
        for(int i = 1; i < n; i++){
            int cur = INT_MAX;
            for(int j = 0; j < primes.size(); j++)
                cur = min(cur, ans[count[j]] * primes[j]);
            for(int j = 0; j < primes.size(); j++)
                if(cur == ans[count[j]] * primes[j]) count[j]++;
            ans[i] = cur;
        }
        return ans[n - 1];
    }
};
// @lc code=end

